package com.learning.spring.cloud.ms.consumer.movie.feign;

import com.learning.spring.cloud.ms.consumer.movie.config.FeignConfig;
import com.learning.spring.cloud.ms.consumer.movie.entity.User;
import feign.Param;
import feign.RequestLine;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * ClassName: UserFeignService
 * Description: Feign 客户端实现声明式REST调用
 * 1- 注解 @FeignClient 中的ms-provider-user是一个任意客户端名称，用于创建Ribbon负载均衡（所以默认实现了负载）。因为Eureka的缘故，Ribbon会把ms-provider-user解析成ms-provider-user Server注册表中的服务
 * <p>
 * 2- 可以使用 url属性指定请求的URL地址
 * <p>
 * 3- configuration指定自定义配置，优先级高
 * <p>
 * Date: 2019/6/4 14:59 【需求编号】
 *
 * @author Sam Sho
 * @version V1.0.0
 */
@FeignClient(name = "ms-provider-user", configuration = FeignConfig.class)
public interface UserFeignService {

    /**
     * 使用SpringMvcContract  契约
     *
     * @param id
     * @return
     */
//    @RequestMapping(value = "/user/{id}", method = RequestMethod.GET)
//    User findById(@PathVariable("id") Long id);


    /**
     * feign 原生的契约
     *
     * @param id
     * @return
     */
    @RequestLine("GET /user/{id}")
    User findByIdCustomize(@Param("id") Long id);
}
